[小ネタ] MackerelのURL外形監視サービスメトリックをエクスポートしてみた #mackerelio
MackerelのURL外形監視は単に死活だけではなく、レスポンスタイムをグラフにプロットしたり、それに対して閾値を設定して通知させたりすることが可能です。
実際監視させると、こんな感じですね。
サービスメトリック「HTTP Response Time」として可視化されます。
ところでMackerelはAPIを使って、収集されたメトリックを時間指定でエクスポートさせることが可能です。
サービスメトリックについてはここにドキュメントがあります。
通常のサービスメトリックであれば、このAPI( metric-names
)を使ってメトリック名を取得したのち、下記のAPIで期間を指定して取得することになるのですが、
URL外形監視の場合は metric-names
を使っても名前が取得出来ません。
% curl -sH "X-Api-Key: ${MACKEREL_APIKEY}" \ https://api.mackerelio.com/api/v0/services/${SERVICE_NAME}/metric-names {"names":[]}
恐らくですが、URL外形監視のメトリックはユーザーに代わってMackerelのシステムが投稿しているため、リストに出てこないのだと思います。
じゃあエクスポート出来ないのか、と言えばそんなことはなくて、ちゃんとメトリック名を調べる方法があります。
具体的にはここでマウスホバーさせてください。
小さくて見づらい上にコピペできないので、不便ですね!
ご安心下さい。このメトリック名は __externalhttp.responsetime.<モニタID>
で一意に求められます。
モニタIDは、URL外形監視の設定画面のURLから確認出来ます。
実際に取得してみたらこんな感じです。 jq
でちょっと整形&時刻情報を UNIXTIME から ISO 8601 に変換してみました。
MACKEREL_APIKEY='****' SERVICE_NAME='Home' MONITOR_ID='****' TIME_FROM=$(date -d "10 minutes ago" +%s) TIME_TO=$(date +%s) URL_API="https://api.mackerelio.com/api/v0/services/${SERVICE_NAME}/metrics" NAME="__externalhttp.responsetime.${MONITOR_ID}" curl -sH "X-Api-Key: ${MACKEREL_APIKEY}" \ "${URL_API}?name=${NAME}&from=${TIME_FROM}&to=${TIME_TO}" \ | jq -c '.metrics[]|[.time,(.time|todate),.value]'
[1657187700,"2022-07-07T09:55:00Z",464] [1657187760,"2022-07-07T09:56:00Z",428] [1657187820,"2022-07-07T09:57:00Z",437] [1657187880,"2022-07-07T09:58:00Z",433] [1657187940,"2022-07-07T09:59:00Z",450] [1657188000,"2022-07-07T10:00:00Z",408] [1657188060,"2022-07-07T10:01:00Z",453] [1657188120,"2022-07-07T10:02:00Z",430] [1657188180,"2022-07-07T10:03:00Z",417] [1657188240,"2022-07-07T10:04:00Z",423]
なお、タイムスタンプの部分は UNIXTIME に変換する必要があるので GNU date を使っていますが、macOS から実行される場合は以下の記事を参考に書き直してみて下さい。